﻿using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Leasson01 : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        #region 知识点一 PlayerPrefs是什么
        //是Unity提供的可以用于存储读取玩家数据的公共类
        #endregion
        #region 知识点二 存储相关
        //PlayerPrefs的数据存储 类似于键值对存储 一个键对应一个值
        //提供了存储3种数据的方法 int float string
        //键：string类型
        //值：int float string 对应3种API
        PlayerPrefs.SetInt("myAge", 18);
        PlayerPrefs.SetFloat("myHeight", 177.5f);
        PlayerPrefs.SetString("myName", "zabry");

        //直接调用Set相关方法 只会把数据存到内存里
        //当游戏结束时 Unity会自动把数据存到硬盘中
        //如果游戏不是正常结束的 而是崩溃 数据是不会存到硬盘中的
        //只要调用该方法 就会马上存储到硬盘中
        PlayerPrefs.Save();

        //PlayerPrefs是有局限性的 它只能存3种类型的数据
        //如果你想要存储别的类型的数据 只能降低精度 或者上升精度来进行存储
        bool sex = true;
        PlayerPrefs.SetInt("sex", sex ? 1 : 0);

        //如果不同类型使用同一键名进行存储 会进行覆盖
        PlayerPrefs.SetFloat("myAge", 20.2f);
        #endregion

        #region 知识点三 读取相关
        //注意 运行时 只要你Set了对应键值对
        //即使没有Save到本地
        //也能够读取出信息

        //int
        int nAge = PlayerPrefs.GetInt("myAge");
        Debug.LogFormat("nAge1={0}", nAge);     //输出0 为什么?因为上面使用SetFloat把SetInt("MyAge")覆盖了

        //如果找不到对应的键值，则返回默认值
        nAge = PlayerPrefs.GetInt("myAge", 100);
        Debug.LogFormat("nAge2={0}", nAge);

        //float
        float fHeight = PlayerPrefs.GetFloat("myHeight");
        Debug.LogFormat("fHeight={0}", fHeight);

        //string
        string name = PlayerPrefs.GetString("myName");
        Debug.LogFormat("name={0}", name);

        //判断数据是否存在
        if (PlayerPrefs.HasKey("myName"))
        {
            Debug.LogFormat("存在MyName对应键值对数据");
        }
        #endregion

        #region 知识点四 删除数据
        //删除指定键盘值对
        PlayerPrefs.DeleteKey("myAge");
        //删除所有存储的信息
        PlayerPrefs.DeleteAll();
        #endregion
    }
}
